package com.css.common.core.utils;

import lombok.experimental.UtilityClass;

import java.io.InputStream;

/**
 * ExcelUtil
 *
 * @author hanyx
 * @date 2019/05/23
 */
@UtilityClass
public class ExcelUtil {

    public InputStream getResourcesFileInputStream(String fileName) {
        return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
    }

//    /**
//     * @param sheet   sheet对象 用例: new Sheet(1, 1, T.class, "客户授信信息", null)
//     * @param data    要写入的数据, 对象需要继承 BaseRowModel,
//     *                并指定 @ExcelProperty(value = {"社会信用代码"}, index = 0)
//     * @param outPath 导出的路径
//     * @throws IOException
//     */
//    public void write(Sheet sheet, List<? extends BaseRowModel> data, String outPath) throws IOException {
//        @Cleanup OutputStream out = new FileOutputStream(outPath);
//        ExcelWriter writer = EasyExcelFactory.getWriter(out);
//        writer.write(data, sheet);
//        writer.finish();
//    }
//
//    /**
//     * @param sheet sheet对象 用例: new Sheet(1, 1, T.class, "客户授信信息", null)
//     * @param data  要写入的数据, 对象需要继承 BaseRowModel,
//     *              并指定 @ExcelProperty(value = {"社会信用代码"}, index = 0)
//     * @param out   OutputStream
//     * @throws IOException
//     */
//    public void writeDown(Sheet sheet, List<? extends BaseRowModel> data, OutputStream out) throws IOException {
//        ExcelWriter writer = EasyExcelFactory.getWriter(out);
//        writer.write(data, sheet);
//        writer.finish();
//    }
//
//    /**
//     * 读数据量少于1千行数据，内部采用回调方法.
//     *
//     * @param sheet    sheet对象 用例: new Sheet(1, 1)
//     * @param filePath 系统内部路径
//     * @return
//     * @throws IOException
//     */
//    public List<Object> simpleRead(Sheet sheet, String filePath) throws IOException {
//        @Cleanup InputStream inputStream = getResourcesFileInputStream(filePath);
//        List<Object> data = EasyExcelFactory.read(inputStream, sheet);
//        return data;
//    }
//
//    /**
//     * 读数据量少于1千行数据，内部采用回调方法.
//     *
//     * @param sheet    sheet对象 用例: new Sheet(1, 1, T.class)
//     * @param filePath 系统内部路径
//     * @return
//     * @throws IOException
//     */
//    public <T> List<T> simplReadByClazz(Sheet sheet, String filePath) throws IOException {
//        @Cleanup InputStream inputStream = getResourcesFileInputStream(filePath);
//        List<T> data = read(inputStream, sheet);
//        return data;
//    }
//
//    private <T> List<T> read(InputStream in, Sheet sheet) {
//        final List<T> rows = new ArrayList<>();
//        new ExcelReader(in, null, new AnalysisEventListener<T>() {
//            @Override
//            public void invoke(T object, AnalysisContext context) {
//                rows.add(object);
//            }
//
//            @Override
//            public void doAfterAllAnalysed(AnalysisContext context) {
//            }
//        }, false).read(sheet);
//        return rows;
//    }
//
//    /**
//     * 读数据量少于1千行数据，内部采用回调方法.
//     *
//     * @param sheet    sheet对象 用例: new Sheet(1, 1)
//     * @param filePath 系统外部路径
//     * @return
//     * @throws IOException
//     */
//    public List<Object> simpleReadOutSystem(Sheet sheet, String filePath) throws IOException {
//        @Cleanup InputStream inputStream = new FileInputStream(new File(filePath));
//        List<Object> data = EasyExcelFactory.read(inputStream, sheet);
//        return data;
//    }
//
//
//    /**
//     * 读数据量大于1千行，内部采用回调方法.
//     *
//     * @param sheet    sheet对象 用例: new Sheet(1, 1, T.class)
//     * @param filePath 系统内部路径
//     * @throws IOException
//     */
//    public void saxRead(Sheet sheet, String filePath, AnalysisEventListener listener) throws IOException {
//        @Cleanup InputStream inputStream = getResourcesFileInputStream(filePath);
//        EasyExcelFactory.readBySax(inputStream, sheet, listener);
//    }
//
//    /**
//     * 读数据量大于1千行，内部采用回调方法.
//     *
//     * @param sheet    sheet对象 用例: new Sheet(1, 1, T.class)
//     * @param filePath 系统外部路径
//     * @param listener 需要自己实现的监听器
//     * @throws IOException
//     */
//    public void saxReadOutSystem(Sheet sheet, String filePath, AnalysisEventListener listener) throws IOException {
//        @Cleanup InputStream inputStream = getResourcesFileInputStream(filePath);
//        EasyExcelFactory.readBySax(inputStream, sheet, listener);
//    }
//
//    /**
//     * @param response HttpServletResponse
//     * @param sheet    sheet对象 用例: new Sheet(1, 1, T.class)
//     * @param fileName fileName
//     * @param data     要写入的数据, 对象需要继承 BaseRowModel,
//     *                 并指定 @ExcelProperty(value = {"社会信用代码"}, index = 0)
//     * @throws IOException
//     */
//    public void download(HttpServletResponse response, Sheet sheet, String fileName, List<? extends BaseRowModel> data) throws IOException {
//        @Cleanup ServletOutputStream out = response.getOutputStream();
//        response.setContentType("multipart/form-data");
//        response.setCharacterEncoding("utf-8");
//        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//        writeDown(sheet, data, out);
//        out.flush();
//    }

}
